package com.laomu.web.controller;

import javax.validation.Valid;

import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.laomu.model.User;
import com.laomu.service.UserService;
import com.laomu.web.utils.URLPath;

/**
 * 系统功能相关控制器实现类
 * @ProjectName:  [act-site] 
 * @Package:      [com.laomu.web.controller.UserController.java]  
 * @ClassName:    [UserController]   
 * @Description:  [处理和系统本身相关的所有业务数据]   
 * @Author:       [老木]   
 * @CreateDate:   [2016年6月21日 下午2:43:15]   
 * @UpdateUser:   [老木]   
 * @UpdateDate:   [2016年6月21日 下午2:43:15]   
 * @UpdateRemark: [说明本次修改内容]  
 * @Version:      [v1.0]
 */
@SessionAttributes({"user"})	
@RequestMapping("/sys")
@Controller
public class SysController {
	
	@Autowired
	private UserService userService;

	/**
	 * 处理跳转登录页面的方法
	 * @return
	 */
	@RequestMapping(value="/login", method=RequestMethod.GET)
	public String login(ModelMap map) {
		map.addAttribute("user", new User());
		return URLPath.LOGIN;
	}
	
	/**
	 * 处理登录的方法
	 * 	真正的登录业务由shiro的过滤器完成
	 * @param user
	 * @return
	 */
	@RequestMapping(value="/login", method=RequestMethod.POST)
	public String login(@ModelAttribute User user, BindingResult result) {
		System.out.println("user:" + user);
		result.rejectValue("username", "error", "账号或者密码有误，请重新登录");
		return URLPath.LOGIN;
	}
	
	/**
	 * 初始化系统主页数据
	 * @return
	 */
	@RequestMapping("/index")
	public String initIndex(ModelMap map) {
		User user = (User) SecurityUtils.getSubject().getPrincipal();
		System.out.println("******initIndex****" + user);
		map.addAttribute("user", user);
		System.out.println("登录成功...");
		return URLPath.INDEX;
	}
	
	/**
	 * 跳转注册页面
	 * @param map
	 * @return
	 */
	@RequestMapping(value="/regist", method=RequestMethod.GET)
	public String regist(ModelMap map){
		map.addAttribute("user", new User());
		return URLPath.REGIST;
	}
	
	/**
	 * 处理注册业务
	 * @param map
	 * @return
	 */
	@RequestMapping(value="/regist", method=RequestMethod.POST)
	public String regist(@Valid @ModelAttribute("user") User user,BindingResult result){
		// 注册数据验证
		if (result.getErrorCount() > 0) {
			System.out.println("注册验证未通过.");
			return URLPath.REGIST;
		}
		// 注册账号，如果出现错误，返回错误码
		int res = userService.regist(user);
		if (res < 0) {
			result.rejectValue("username", "exist","这个账号已经注册过了，请使用其他账号注册");
			return URLPath.REGIST;
		}
		
		return URLPath.LOGIN;
	}
	
}